package com.demo.cms.service;

import java.util.List;

import com.demo.cms.model.Channel;
import com.demo.core.dao.base.support.ResultSearchResult;

/**
 * 频道服务接口
 * @author ryuu.kk
 *
 */
public interface ChannelService {

	/**
	 * 增加频道
	 * @param channel 频道模型
	 * @return 外键ID
	 */
	Long save(Channel channel);
	
	/**
	 * 频道模型是否存在
	 * @param id 外键ID
	 * @return 是否存在
	 */
	boolean exists(Long id);
	
	/**
	 * 更新频道
	 * @param id 频道ID
	 * @param title 频道标题
	 * @param path 频道路径
	 * @param templateId 频道模板ID
	 * @param i18n 频道国际化CODE
	 */
	void update(Long id, String title, String path, Long templateId, String i18n);
	
	/**
	 * 更新频道
	 * @param id 频道ID
	 * @param enabled 可用标志
	 * @param status 状态位
	 */
	void update(Long id, boolean enabled, String status);
	
	/**
	 * 更新指定频道状态
	 * @param id 频道ID
	 * @param status 频道状态
	 */
	void update(Long id, String status);

	/**
	 * 更新站点所有频道状态
	 * @param siteId 站点ID
	 * @param status 频道状态
	 */
	void updateAll(Long siteId, String status);
	
	/**
	 * 将频道作为默认频道使用
	 * @param id 频道ID
	 * @param siteId 站点ID
	 */
	void setDefault(Long id, Long siteId);
	
	/**
	 * 删除频道
	 * @param id 扩展属性ID
	 */
	void delete(Long id);
	
	/**
	 * 删除站点下的所有频道
	 * @param siteId 站点ID
	 */
	void deleteAll(Long siteId);
	
	/**
	 * 查询站点所有频道
	 * @param siteId 站点ID
	 * @return 频道列表
	 */
	List<Channel> findList(Long siteId);
	
	/**
	 * 查询站点所有频道
	 * @param siteId 站点ID
	 * @param i18n 频道的国际化CODE
	 * @return 频道列表
	 */
	List<Channel> findList(Long siteId, String i18n);
	
	/**
	 * 通过ID查询频道
	 * @param id 频道ID
	 * @return 频道
	 */
	Channel find(Long id);
	
	/**
	 * 获得频道的默认频道
	 * @return Channel 频道模型
	 */
	Channel findDefault(Long siteId);
	
	/**
	 * 通过频道Path查询频道模型
	 * @param path 频道Path
	 * @return 频道
	 */
	Channel find(String path);
	
	/**
	 * 查询站点模板所有频道
	 * @param siteId 站点ID
	 * @param templateId 模板ID
	 * @return 频道
	 */
	List<Channel> findList(Long siteId, Long templateId);
	
	/**
	 * 查询站点模板所有频道
	 * @param siteId 站点ID
	 * @param templateId 模板ID
	 * @param i18n 频道国际化CODE
	 * @return 频道
	 */
	List<Channel> findList(Long siteId, Long templateId, String i18n);

	/**
	 * 分页查询频道模型列表
	 * @param siteId 站点ID
	 * @param i18n 国际化编码CODE
	 * @param firstResult 起点数据
	 * @param maxResults 最大结果集
	 * @return ResultSearchResult<Channel>
	 */
	ResultSearchResult<Channel> search(Long siteId, String i18n, int firstResult, int maxResults);
	
	/**
	 * 分页查询频道模型列表
	 * @param siteId 站点ID
	 * @param firstResult 起点数据
	 * @param maxResults 最大结果集
	 * @return ResultSearchResult<Channel>
	 */
	ResultSearchResult<Channel> search(Long siteId, int firstResult, int maxResults);
}
